/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;

import fisica.CapaFisica;
import fisica.TratamientoQuirurgicoFisica;
import hibernate.objeto.ProfesionalTratamientoQuirurgico;
import hibernate.objeto.TratamientoQuirurgico;
import java.util.Date;
import java.util.Vector;
import presentacion.CapaPresentacion;

/**
 *
 * @author Gonzalo
 */
public class TratamientoQuirurgicoLogica extends CapaLogica {

    /**
     * Agrega el objeto TratamientoQuirurgico en la base de datos.
     *
     * @param datosProfesionalesTratamientoQuirurgico
     * Los datos de los profesionales involucrados a agregar
     * @param tratamientoQuirurgico El objeto TratamientoQuirurgico a
     * agregar
     * @param idTratamientoQuirurgico El id del objeto
     * creado para su posterior recuperación
     *
     * @return true si se agregó correctamente, false en caso contrario
     */
    public static boolean agregarTratamientoQuirurgico(
            Object[] datosGeneralTratamientoQuirurgico,
            Object[][] datosProfesionalesTratamientoQuirurgico,
            TratamientoQuirurgico tratamientoQuirurgico,
            int[] idTratamientoQuirurgico) {

        int cantidadObjetosDeterminacionesACrear =
                datosProfesionalesTratamientoQuirurgico.length;

        tratamientoQuirurgico =
                crearObjetoTratamientoQuirurgico(datosGeneralTratamientoQuirurgico,
                tratamientoQuirurgico);

        //Persiste el objeto
        if (CapaFisica.guardarOActualizarObjeto(tratamientoQuirurgico)) {
            idTratamientoQuirurgico[0] = tratamientoQuirurgico
                    .getIdTratamientoQuirurgico();
            for (int i = 0; i < cantidadObjetosDeterminacionesACrear; i++) {
                //Vinculo el objeto
                ProfesionalTratamientoQuirurgicoLogica.
                        agregarProfesionalTratamientoQuirurgico(
                        datosProfesionalesTratamientoQuirurgico[i],
                        tratamientoQuirurgico);
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * Crea un objeto TratamientoQuirurgico.
     *
     * @param datoGeneralTratamientoQuirurgico
     * @param tratamientoQuirurgico El objeto TratamientoQuirurgico a
     * agregar
     * @return El objeto creado u obtenido
     */
    private static TratamientoQuirurgico
             crearObjetoTratamientoQuirurgico(Object[] datoGeneralTratamientoQuirurgico,
             TratamientoQuirurgico tratamientoQuirurgico) {

        tratamientoQuirurgico.setHoraInicioTratamientoQuirurgico(
                datoGeneralTratamientoQuirurgico[
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_HORA_INICIO].
                toString());

        tratamientoQuirurgico.setFechaInicioTratamientoQuirurgico(
                (Date) datoGeneralTratamientoQuirurgico[
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_FECHA_INICIO]);
        
        tratamientoQuirurgico.setHoraFinTratamientoQuirurgico(
                datoGeneralTratamientoQuirurgico[
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_HORA_FIN].
                toString());

        tratamientoQuirurgico.setFechaFinTratamientoQuirurgico(
                (Date) datoGeneralTratamientoQuirurgico[CapaLogica.
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_FECHA_FIN]);

        tratamientoQuirurgico.setNumeroQuirofanoTratamientoQuirurgico(
                (Integer) datoGeneralTratamientoQuirurgico[
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_NUMERO_QUIROFANO]);

        tratamientoQuirurgico.setUrgenteTratamientoQuirurgico(
                datoGeneralTratamientoQuirurgico[
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_URGENTE].toString());

        tratamientoQuirurgico.setDescripcionTratamientoQuirurgico(
                datoGeneralTratamientoQuirurgico[
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_DESCRIPCION].toString());

        return tratamientoQuirurgico;
    }


    /**
     * Retorna el objeto TratamientoQuirurgico según el id.
     *
     * @param idTratamientoQuirurgico  El id del TratamientoQuirurgico
     * @return El objeto TratamientoQuirurgico consultado, null si no existe
     */
    public static TratamientoQuirurgico
            getTratamientoQuirurgicoPorId(
            int idTratamientoQuirurgico) {
        return TratamientoQuirurgicoFisica.
                getTratamientoQuirurgicoPorId(idTratamientoQuirurgico);
    }

    /**
     * Retorna todo el objeto TratamientoQuirurgico en string.
     *
     * @param tratamientoQuirurgico El objeto a escribir
     */
    public static String getTratamientoQuirurgicoString(TratamientoQuirurgico tratamientoQuirurgico) {
        String tratamientoQuirurgicoString =
                "idTratamientoQuirurgico: " +
                tratamientoQuirurgico.getIdTratamientoQuirurgico() + "\n" +
                "horaInicioTratamientoQuirurgico: " +
                tratamientoQuirurgico.getHoraInicioTratamientoQuirurgico() + "\n" +
                "fechaInicioTratamientoQuirurgico: " +
                tratamientoQuirurgico.getFechaInicioTratamientoQuirurgico() + "\n" +
                "horaFinTratamientoQuirurgico: " +
                tratamientoQuirurgico.getHoraFinTratamientoQuirurgico() + "\n" +
                "fechaFinTratamientoQuirurgico: " +
                tratamientoQuirurgico.getFechaFinTratamientoQuirurgico() + "\n" +
                "numeroQuirofanoTratamientoQuirurgico: " +
                tratamientoQuirurgico.getNumeroQuirofanoTratamientoQuirurgico() + "\n" +
                "urgenteTratamientoQuirurgico: " +
                tratamientoQuirurgico.getUrgenteTratamientoQuirurgico() + "\n" +
                "descripcionTratamientoQuirurgico: " +
                tratamientoQuirurgico.getDescripcionTratamientoQuirurgico() + "\n";

        Vector<ProfesionalTratamientoQuirurgico>
                vectorProfesionalTratamientoQuirurgico =
                ProfesionalTratamientoQuirurgicoLogica.
                getVectorProfesionalTratamientoQuirurgicoPorIdTratamientoQuirurgico(
                tratamientoQuirurgico.getIdTratamientoQuirurgico());
            if (vectorProfesionalTratamientoQuirurgico != null) {
                for (int i = 0; i < vectorProfesionalTratamientoQuirurgico.size(); i++) {
                    tratamientoQuirurgicoString += ProfesionalTratamientoQuirurgicoLogica.
                    getProfesionalTratamientoQuirurgicoString(
                    vectorProfesionalTratamientoQuirurgico.get(i));
            }
                
        }

        return tratamientoQuirurgicoString;
    }


    /**
     * Retorna todo el objeto TratamientoQuirurgico en string.
     *
     * @param tratamientoQuirurgico El objeto a escribir
     */
    public static String getTratamientoQuirurgicoHTML(TratamientoQuirurgico tratamientoQuirurgico) {
        String tratamientoQuirurgicoHTML = "";

        if (tratamientoQuirurgico != null) {

            String profesionalHTML = "";

            Vector<ProfesionalTratamientoQuirurgico> vectorProfesionalTratamientoQuirurgico =
                    ProfesionalTratamientoQuirurgicoLogica.getVectorProfesionalTratamientoQuirurgicoPorIdTratamientoQuirurgico(
                    tratamientoQuirurgico.getIdTratamientoQuirurgico());
            if (vectorProfesionalTratamientoQuirurgico != null) {

                
                
                for (int i = 0; i < vectorProfesionalTratamientoQuirurgico.size(); i++) {
                    profesionalHTML += "</font><br><br><hr /><hr /><br>";
                    profesionalHTML += ProfesionalTratamientoQuirurgicoLogica.
                            getProfesionalTratamientoQuirurgicoHTML(
                            vectorProfesionalTratamientoQuirurgico.get(i));
                }

            }

            tratamientoQuirurgicoHTML = "<font size=\"3\" face=\"arial\" color=\"blue\">TRATAMIENTO QUIRÚRGICO</font><br><br> "
                    + "<hr /><font size=\"3\" face=\"arial\" color=\"blue\">Fecha inicio: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    CapaPresentacion.imprimirFecha(tratamientoQuirurgico.
                    getFechaInicioTratamientoQuirurgico()) + " - " +
                    tratamientoQuirurgico.getHoraInicioTratamientoQuirurgico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"blue\">Fecha fin: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    CapaPresentacion.imprimirFecha(tratamientoQuirurgico.
                    getFechaFinTratamientoQuirurgico()) + " - " +
                    tratamientoQuirurgico.getHoraFinTratamientoQuirurgico() +  "</font><br><hr /><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"blue\">Número quirófano: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    tratamientoQuirurgico.getNumeroQuirofanoTratamientoQuirurgico() + "</font><br><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"blue\">Urgente: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    tratamientoQuirurgico.getUrgenteTratamientoQuirurgico() + "</font><br><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"blue\">Descripción: </font><br>"
                    + "<font size=\"3\" face=\"arial\">" +
                    tratamientoQuirurgico.getDescripcionTratamientoQuirurgico() +
                    profesionalHTML + "</font><br><br>";
        } else {
            tratamientoQuirurgicoHTML = "<font size=\"3\" face=\"arial\" color=\"blue\">TRATAMIENTO QUIRÚRGICO</font><br><br> " +
                    "<hr /><font size=\"3\" face=\"arial\">No posee</font><br></font><hr />";
        }
        return tratamientoQuirurgicoHTML;
    }

}
